#include "wxsfontpickerctrl.h"

#include <wx/fontpicker.h>

namespace {
  wxsRegisterItem<wxsFontPickerCtrl> Reg( _T( "FontPickerCtrl" ), _T( "字体控件" ), wxsTWidget, _T( "对话框" ), 100 );
  WXS_ST_BEGIN( wxsFontPickerCtrlStyles, _T( "wxFNTP_FONTDESC_AS_LABEL|wxFNTP_USEFONT_FOR_LABEL" ) )
  WXS_ST_CATEGORY( "wxFontPickerCtrl" )
  WXS_ST( wxFNTP_FONTDESC_AS_LABEL )
  WXS_ST( wxFNTP_USEFONT_FOR_LABEL )
  WXS_ST( wxFNTP_USE_TEXTCTRL )
  WXS_ST_END()
  WXS_EV_BEGIN( wxsFontPickerCtrlEvents )
  WXS_EVI( EVT_FONTPICKER_CHANGED, wxEVT_COMMAND_FONTPICKER_CHANGED, wxFontPickerEvent, FontChanged )
  WXS_EV_END()
}

wxsFontPickerCtrl::wxsFontPickerCtrl( wxsItemResData* Data ):
  wxsWidget( Data, &Reg.Info, wxsFontPickerCtrlEvents, wxsFontPickerCtrlStyles ) {}

void wxsFontPickerCtrl::OnBuildCreatingCode() {
  switch( GetLanguage() ) {
    case wxsCPP: {
      AddHeader( _T( "<wx/fontpicker.h>" ), GetInfo().ClassName, 0 );
      wxString sFntName = GetCoderContext()->GetUniqueName( _T( "PickerFont" ) );
      wxString sFnt = m_fdFont.BuildFontCode( sFntName, GetCoderContext() );
      if( sFnt.Len() == 0 ) {
        sFntName = wxT( "wxNullFont" );
      }
      Codef( _T( "%s" ), sFnt.wx_str() );
      Codef( _T( "%C(%W, %I, %s, %P, %S, %T, %V, %N);\n" ), sFntName.wx_str() );
      BuildSetupWindowCode();
      return;
    }
    case wxsUnknownLanguage:
    default: {
      wxsCodeMarks::Unknown( _T( "wxsFontPickerCtrl::OnBuildCreatingCode" ), GetLanguage() );
    }
  }
}

wxObject* wxsFontPickerCtrl::OnBuildPreview( wxWindow* Parent, long Flags ) {
  wxFontPickerCtrl* Preview;
  wxFont fnt = m_fdFont.BuildFont();
  Preview = new wxFontPickerCtrl( Parent, GetId(), fnt, Pos( Parent ), Size( Parent ), Style() );
  return SetupWindow( Preview, Flags );
}

void wxsFontPickerCtrl::OnEnumWidgetProperties( M_Code_unused long Flags ) {
  WXS_FONT( wxsFontPickerCtrl, m_fdFont, _T( "Font" ), _T( "font" ) )
}
